package com.deyuanyun.pic.settings.service.base;

import com.deyuanyun.pic.settings.controller.dto.BizMsgThresholdVO;
import com.deyuanyun.pic.settings.controller.dto.base.AcDcMiorRecordDTO;
import com.deyuanyun.pic.settings.controller.dto.base.ExinspCptestStationDTO;
import com.deyuanyun.pic.settings.controller.dto.base.PigTaskDTO;
import com.deyuanyun.pic.settings.controller.dto.base.RepairTaskDTO;
import com.deyuanyun.pic.settings.controller.dto.base.RiskAssessmentDTO;
import com.deyuanyun.pic.settings.controller.dto.prvlg.RoleDTO;
import com.deyuanyun.pic.settings.domain.base.BizMsgThreshold;
import com.deyuanyun.pic.settings.enumeration.ThresholdType;

import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;


/**
 * The interface Biz msg threshold service.
 */
public interface BizMsgThresholdService {
    /**
     * Select by primary key biz msg threshold.
     *
     * @param id the id
     * @return the biz msg threshold
     */
    BizMsgThreshold selectByPrimaryKey(String id);

    /**
     * Delete by primary key int.
     *
     * @param id the id
     * @return the int
     */
    int deleteByPrimaryKey(String id);

    /**
     * Update by primary key selective int.
     *
     * @param record the record
     * @return the int
     */
    int updateByPrimaryKeySelective(BizMsgThreshold record);

    /**
     * Update by primary key int.
     *
     * @param record the record
     * @return the int
     */
    int updateByPrimaryKey(BizMsgThreshold record);

    /**
     * Insert int.
     *
     * @param record the record
     * @return the int
     */
    int insert(BizMsgThreshold record);

    /**
     * Insert selective int.
     *
     * @param record the record
     * @return the int
     */
    int insertSelective(BizMsgThreshold record);

    /**
     * 插入业务阀值信息表和业务阀值系统设置表数据
     * @param list
     * @param type 阀值信息父级类型
     * @return
     */
    boolean insertBizMsgThresholdInfo(List list, String type);

    /**
     * 根据类型得到业务信息阀值集合数据
     *
     * @param types 类型
     * @return list list
     * @author axiao(xj08.dream gmail.com)
     * @date 2016 -06-23
     */
    public List<BizMsgThresholdVO> queryDataByTypes(String ... types);

    /**
     * 据类型得到业务信息阀值数据
     *
     * @param type the type
     * @return the biz msg threshold vo
     * @author axiao(xj08.dream gmail.com)
     * @date 2016 -06-27
     * @version 1.0 Histroy: [修改人][时间][描述]
     */
    public BizMsgThresholdVO queryDataByTypeOne(String type);


    /**
     * 根据类型查询该类型下的所有子节点,只负责页面显示
     * @param type 类型
     * @return
     * @author axiao(xj08.dream@gmail.com)
     * @date 2016-06-27
     */
    public List<BizMsgThresholdVO> queryChildForPage(String type);

    /**
     * 查询所有角色列表
     *
     * @return list list
     * @author axiao(xj08.dream gmail.com)
     * @date 2016 -06-23
     */
    public List<RoleDTO> queryAllRole();


    /**
     * 根据统一编号查询风险评价信息
     * @param map: map参数说明
     *       <pre>codeList：统一编号集合
     *            riskGrade：风险等级对应的值
     *            areaLevel：地区等级对应的值
     *       </pre>
     * @return
     * @author axiao(xj08.dream@gmail.com)
     * @date 2016-06-23
     */
    public List<RiskAssessmentDTO> queryRiskAssessmentInfo(Map<String, Object> map);

    /**
     * 判断风险评价或者立即维修的缺陷消息是否已经推送
     * @param paramMap
     * <pre> key值说明：<br/>
     *     lastDate： 更新时间或者创建时间<br/>
     *     bizMsgThresholdId： 阀值id<br/>
     *     roleId： 角色id<br/>
     * </pre>
     * @return
     * @author axiao(xj08.dream@gmail.com)
     * @date 2016-06-28
     */
    public boolean countRiskDefectMsg(Map<String, Object> paramMap);

    /**
     * 判断管道周期是否已经推送，如果大于零视为已经推送过了
     * @param  paramMap key值说明：
     * <pre>
     * pushFlagStr：是否推送判断的关键字符串，由管道id+管段id+yyyyMMdd，组成<br/>
     * bizMsgThresholdId：阀值id<br/>
     * roleId：角色id
     * </pre>
     * @return
     */
    public boolean countPipeSchedule(Map<String, Object> paramMap);

    /**
     * 创建、修改或修改管道周期任务调度
     * @param oldBizMsgThreshold 为修改之前的管道业务阀值信息
     * @param newBizMsgThreshold 页面提交的管道业务阀值信息
     * @param groupName 任务调度组名
     * @author axiao(xj08.dream@gmail.com)
     * @date 2016-06-28
     */
    public void updatePipeSchedule(BizMsgThresholdVO oldBizMsgThreshold, BizMsgThresholdVO newBizMsgThreshold, String groupName);

    /**
     * 风险评价保存操作，根据传的json结构的数据更新
     *
     * @param map
     * @author axiao(xj08.dream gmail.com)
     * @date 2016 -06-27
     * @return
     */
    public void updateRisk(Map<String, Object> map);

    /**
     * 完整性评价保存操作，根据传的json结构的数据更新
     * @param map
     * @return
     */
    public void updateIntegrity(Map<String, Object> map);

    /**
     * 缺陷评价保存操作，根据传的json结构的数据更新
     * @param map
     * @return 返回创建好的任务调度编号
     */
    public void updateDefectEvaluation(Map<String, Object> map);

    /**
     * 业务阀值页面撤销操作
     * @param type 需要更新的阀值父级类型，#{@link ThresholdType}
     * @return
     */
    public int updateThresholdPageCancel(String type);


    /**
     * 业务阀值带有管道周期页面撤销操作
     * @param parentType 需要更新的阀值父级类型，#{@link ThresholdType}
     * @param thresholdType 需要重置的管道周期类型 #{@link ThresholdType}
     * @param groupName 任务调度组名
     * @return
     */
    public int updateThresPipePageCancel(String parentType, ThresholdType thresholdType, String groupName);


    /**
     * 根据缺陷评价任务id得到缺陷评价任务信息
     * @param taskId 缺陷评价任务id
     * @return
     */
    public Map<String, Object> findEvaluationTaskInfo(String taskId);


    /**
     * 得到维修项目名称
     * @param repairIds 维修项目id
     * @return
     */
    public List<RepairTaskDTO> queryRepairByIds(String ... repairIds);

    /**
     * 根据检测任务id获取到具体的信息
     * @param taskId
     * @return
     */
    public PigTaskDTO findPigTaskById(String taskId);

    /**
     * 风险评价-----查询测试桩检测数据信息集合
     * @param pipeLineId 管道id
     * @param beginMileage 起点绝对距离
     * @param endMileage 终点绝对距离
     * @return
     */
    public List<ExinspCptestStationDTO> queryRiskExinspCptestStation(String pipeLineId, Long beginMileage, Long endMileage);

    /**
     * 风险评价-----查询交流/直流干扰强度信息集合
     * @param pipeLineId 管道id
     * @param beginMileage 起点绝对距离
     * @param endMileage 终点绝对距离
     * @return
     */
    public List<AcDcMiorRecordDTO> queryRiskAcDcMiorInfo(String pipeLineId, Long beginMileage, Long endMileage);

    /**
     * 根据角色id查询用户id
     * @param roleIds
     * @return
     * @author axiao(xj08.dream@gmail.com)
     * @date 2016-12-27
     */
    public Set<String> queryUseIdByRoleIds(Collection<String> roleIds);
}